МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра САПР
ЗВІТ
до лабораторної роботи № 6
на тему:
ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ.
ВИКОРИСТАННЯ РЕГУЛЯРНИХ ВИРАЗІВ ДЛЯ ОБРОБКИ ТЕКСТУ.
з дисципліни “Комп’ютерна лінгвістика”
Мета роботи: Вивчення основ програмування на мові Python. Використання регулярних виразів для обробки текстів.
Теоретичні відомості
Синтаксис регулярних висловів залежить від інтерпретатора, що використовується для їх обробки. Пошук слів із закінченням ed можна здійснити використовуючи регулярний вираз «ed$». Потрібно використати функцію re.search(p, s), яка перевіряє чи може зразок p бути знайдений у будь-якому місці стрічки s. Потрібно визначити символи, які шукаємо та використати символ долара , який в регулярних виразах позначає кінець слова:
Символ ”.” універсальний символ , якому відповідає будь-який один символ. Нехай потрібно знайти слова з восьми літер, де j – третя літера та t – шоста літера. При створенні регулярного виразу у місцях де може бути будь-який символ вказується крапка. Символ ”^” вказує на початок стрічки:
Символ “ ? “ вказує на те що попередній символ не є обовязковим. Вираз «^e-?mail$» відповідає двом стрічкам email та e-mail. Можна знайти загальну кількість таких стрічок (врахувавши різні способи їх запису) у будь-якому тексті скориставшись sum(1 for w in text if re.search('^e-?mail$', w)).
Вираз re.search(regexp, w) дозволяє знаходити слова w , які відповідають регулярному виразу regexp . Регулярні вирази також можна використовувати для виявлення фрагментів слів, або для модифікації слів різними способами.
Метод re.findall() ("знайти всеl") дозволяє знайти всі відповідності даному регулярному виразу. В наступному прикладі показано знаходження та підрахунок всіх голосних:
Тут, re.findall() знаходить тільки суфікс, хоча регулярний вираз відповідає всьому слову. Це сталося тому, що круглі дужки задають не тільки область дії оператора диз’юнкції але і виконують функцію вибору підстрічки яку потрібно вилучити. Коли потрібно в регулярному виразі використовувати круглі дужки для вказання області дії оператор,а але не потрібно здійснювати вилучення в регулярний вираз потрібно додати ?: , .
Спеціальний тип регулярних виразів може використовуватися для пошуку серед слів у тексті (текст – послідовність окремих слів). Наприклад, за допомогою виразу "<a> <man>" можна знайти всі випадки вживання a man в тексті. Кутові дужки використовуються для позначення меж і всі пробіли мід цими дужками ігноруються (індивідуальна особливість NLTK's findall() методу для тексту). В наступному прикладі включено <.*> #1 для виявлення всіх окремих слів, а круглі дужки дозволять вибрати ці слова окремо від словосполучень ( a monied man).
ТЕКСТИ ПРОГРАМ НА МОВІ PYTHON
ВАРІАНТ №2
1. Описати, які класи стрічок відповідають наступному регулярному виразу. [a-zA-Z]+. Результати перевірити використовуючи nltk.re_show( ).
>>> from __future__ import division
>>> import nltk, re, pprint
>>> f = open ('d://text.txt')
>>> raw = f.read ()
>>> nltk.re_show ('[a-zA-Z]+', raw)
{So}, {at} {the} {start} {of} 2012, {I} {set} {myself} {the} {challenge} {of} {trying} {to} {read} {a} {book} {from} {every} {country} ({well}, {all} 195 {UN}-{recognised} {states} {plus} {former} {UN} {member} {Taiwan}) {in} {a} {year} {to} {find} {out} {what} {I} {was} {missing}.
Виділяє всі слова, які складаються з літер, але не виділяє цифри і розділові знаки.
2. Описати, які класи стрічок відповідають наступному регулярному виразу. [A-Z][a-z]*. Результати перевірити використовуючи nltk.re_show()
>>> from __future__ import division
>>> import nltk, re, pprint
>>> f = open ('d://text.txt')
>>> raw = f.read ()
>>> nltk.re_show ('[A-Z][a-z]*', raw)
{So}, at the start of 2012, {I} set myself the challenge of trying to read a book from every country (well, all 195 {U}{N}-recognised states plus former {U}{N} member {Taiwan}) in a ...